iT邦幫忙

DAY 13
0

x86 android 設備與外部硬體溝通研究系列 第 13

x86 android 設備與外部硬體溝通研究 - Arduino firmata protocol -3 (13/30)

  • 分享至 

  • xImage
  •  

昨天的 digital firmata sample , 一定有許多東西看得很模糊,

今天我們來看 arduino-1.0.6\libraries\Firmata\Boards.h 這個針對各種板子的PIN腳定義標頭檔。

我們可以知道 arduino 定義 3 種 PORT : 分別是D/B/C :

  1. PORTD是 digital pins 0 to 7
  2. PORTB是 digital pins 8 to 13 The two high bits (6 & 7) map to the crystal pins and are not usable
  3. PORTC是 analog pins 0 to 5. Pins 6 & 7 are only accessible on the Arduino Mini

而這三種 PORT 各有 3 種資料呼叫使用方式,例如:

  1. DDRB - The Port B Data Direction Register - read/write
  2. PORTB - The Port B Data Register - read/write
  3. PINB - The Port B Input Pins Register - read only

TOTAL_PORTS:同等於 (TOTAL_PINS + 7) / 8

TOTAL_PINS:剛好是 TOTAL_PORTS *8

TOTAL_ANALOG_PINS:目前這張 arduino 板子支援的 analog 使用的 pin 腳數量

#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) <= 19)
#define IS_PIN_ANALOG(p) ((p) >= 14 && (p) < 14 + TOTAL_ANALOG_PINS)
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)

如上方所示,IS_PIN_XXX 開頭的function 是拿來判斷輸入的 pin number 是否能夠拿來做某項 XXX 用途,後面對應像是**((p) >= 2 && (p) <= 19)** 這個部分,每張板子都不一樣。原文解釋說明如下:

IS_PIN_XXXX(pin): The IS_PIN macros resolve to true or non-zero
if a pin as implemented by Firmata corresponds to a pin
that actually implements the named feature.

PIN_TO_XXXX(pin): The PIN_TO macros translate pin numbers as
implemented by Firmata to the pin numbers needed as inputs
to the Arduino functions. The corresponding IS_PIN macro
should always be tested before using a PIN_TO macro, so
these macros only need to handle valid Firmata pin
numbers for the named feature.

我們明天見 :P


上一篇
x86 android 設備與外部硬體溝通研究 - Arduino firmata protocol -2 (12/30)
下一篇
x86 android 設備與外部硬體溝通研究 - Arduino firmata protocol -4 (14/30)
系列文
x86 android 設備與外部硬體溝通研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言